1

JS(JavaScript)
一.错误与异常
1.概述
错误,指程序中的非正常运行状态,在其它语言中称为异常或错误将每个错误中创建个Error对象,描述包含的错误信息
通过使用JavaScript提供异常的处理语句,可以用结构化方式捕捉发生错误,异常处理代码与核心代码实现分离
2.try...catch语句

  • try...catch语句

是指JavaScript中处理异常一种标准方式,try语句是为尝试,如出现错误,则以catch语句进行捕获

try{
   //用于捕获指定语句中错误与异常
   console.log(v);
//   调用未定义变量-语法报错
}
catch(error) {
    //e-表示try语句中出现错误信息
    console.log(error);
}
finally {
    console.log(error);
}

3.错误类型

  • throw语句

用来抛出一个用户自定义的异常,throw后的语句将不会被执行,且控制被传递到调用第一个catch块,如没有catch块,将终止程序

function fn(v) {
    if (v) {
    } else {
       throw { name : '犬夜叉'};
    }
}

// console.log(fn(10));//10
// console.log(fn());

var result;
try {
    result = fn();
} catch (e) {
    result = 'unkown';
    console.log(e.name);
}
console.log(result);

二.this关键字
1.概述
定义个函数并一定要返回个对象,通过调用定义对象的位置

  • this基本用法
//定义一个全局变量
var v = 100;
//this经常定义在函数的作用域中
function fn() {
    //this总是要返回一个对象
    console.log(this.v);
//    this指向哪个对象不取决于函数定义位置
}
//this指向哪个对象,取决于调用的位置
//fn();//函数的调用

// 定义个对象,将fn函数作为obj对象的方法
var obj = {
    v : 200,
    f : fn
}
console.log(this.v);

2.绑定规则

  • 隐式绑定丢失

是指被隐式绑定函数丢失绑定对象,则为默认绑定,从而把this绑定到全局对象

var v = 100;
//定义哥全局变量
function fn() {
//定义个函数
    console.log(this.v);
}
var obj = {
    v : 200,
    f : fn
    //对象的f()方法指向fn()函数
}
//定义个全局变量,并被赋值为对象obj的f()方法
var fun = obj.f;
//将fun作为个函数进行调用
fun();
  • 显式绑定

明确在调用时,this绑定对象,JS提供这apply()和call()两个方法实现,第一个参数接收是个对象,把这对象绑定this,接着调用函数是这个this

var v = 100;
//定义哥全局变量
function fn() {
//定义个函数
    console.log(this.v);
}
var obj = {
    v : 200,
    f : fn
    //对象的f()方法指向fn()函数
}
//定义个全局变量,并被赋值为对象obj的f()方法
var fun = obj.f;
//将fun作为个函数进行调用
fun.apply(obj);
  • new绑定

在JS中构造函数使用new操作符调用函数,内置包括对象函数所有函数都可以调用函数
1新创建个全新对象
2新对象绑定到函数调用this
3该函数如没有返回其它对象,则new表达式的函数会返回到新的对象

function Hero(name) {
    this.name = name;
}

var hero1 = new Hero('犬夜叉');
var hero2 = new Hero('戈薇');

3.绑定例外

  • 被忽略的this

null和undefined绑定在this对象,以call,apply或bind调用会被忽略

function fn(){
//定义个函数
    console.log(this.v);
}

var v = 100;
//定个全局变量
fn.call(null);//undefined
//用call来调用函数
var result = Math.max.apply(null, [1,2,3,4,5,2,3]);
console.log(result);
  • 间接引用

有意无意的创建个函数,并调用这个函数为默认绑定

function foo() {
    console.log( this.a );
}
var a = 2;
var o = {
    a: 3,
    foo: foo
};
o.foo(); // 3

var p = { a: 4 };

// p.foo = o.foo;
// p.foo();// 4

(p.foo = o.foo)(); // 2

佐珥玎
41 声望8 粉丝